package mutation_selection;

import java.util.Random;

public class MutationSelectionExample {
	
	private double besteWert;
	private double neueWert;
	private double zielWert;

	private Random r;
	private int maxRunden;
	
	public MutationSelectionExample (double zielWert, int maxRunden)
	{
		this.maxRunden = maxRunden;
		this.zielWert = zielWert;
		
		r = new Random(); //Startwert 
		besteWert = r.nextGaussian() % 1.0;
	}
	
	/**
	 * berechnet Abstand zwischen zielWert und wert
	 **/
	public double eval(double wert)
	{
		return Math.abs(zielWert - wert);
	}
	
	public void optimieren() {
		int aufwand = 0;
		System.out.println("bestWert\t\t\t neuer bestWert");
		for(int i = 0; i < maxRunden; i++)
		{
			neueWert = r.nextGaussian() % 1.0; /* ist natuerlich keine richtige Mutation*/ 
			// Selektion
			if(eval(besteWert) > eval(neueWert))	{
				System.out.println(besteWert + "\t\t" + neueWert);
				besteWert = neueWert;
			}
			aufwand++;
		}
		System.out.println("*ENDE*");
		System.out.println("Ergebnis: " + besteWert);
		System.out.println("Aufwand: " + aufwand);
	}
	
	public static void main(String[] args) {
		MutationSelectionExample m = new MutationSelectionExample(0, 100);
		m.optimieren();
		
	}
}
